package com.kakame.codenews.base.web.fast.mapping.common;

import java.io.Serializable;
import java.util.Date;

import com.kakame.codenews.base.util.SystemUtil;
import com.kakame.codenews.base.web.annotation.ColumnMapping;
import com.kakame.codenews.base.web.annotation.TableMapping;
import com.kakame.codenews.base.web.cache.DictCache;
import com.kakame.codenews.base.web.cache.UserCache;

/**
 * 
 * @author 何家明  2018年08月02日 13:21:15
 */
@TableMapping("t_common_article")
public class Article implements Serializable {

    private static final long serialVersionUID = 1L;

    @ColumnMapping(column = "id")
    private String id;

    @ColumnMapping(column = "article_title")
    private String articleTitle;

    @ColumnMapping(column = "article_category")
    private String articleCategory;

    @ColumnMapping(column = "article_label")
    private String articleLabel;

    @ColumnMapping(column = "article_content")
    private String articleContent;

    @ColumnMapping(column = "article_status")
    private String articleStatus;

    @ColumnMapping(column = "article_collect_num")
    private Integer articleCollectNum;

    @ColumnMapping(column = "article_click_num")
    private Integer articleClickNum;

    @ColumnMapping(column = "article_comment_num")
    private Integer articleCommentNum;

    @ColumnMapping(column = "status")
    private String status;

    @ColumnMapping(column = "create_time")
    private Date createTime;

    @ColumnMapping(column = "create_user_id")
    private String createUserId;

    @ColumnMapping(column = "update_time")
    private Date updateTime;

    @ColumnMapping(column = "update_user_id")
    private String updateUserId;

    @ColumnMapping(column = "verify_time")
    private Date verifyTime;

    @ColumnMapping(column = "verify_user_id")
    private String verifyUserId;

    @ColumnMapping(column = "article_visible")
    private String articleVisible;


    public Article() {
    }
    public Article(Builder builder) {
        this.id = builder.id;
        this.articleTitle = builder.articleTitle;
        this.articleCategory = builder.articleCategory;
        this.articleLabel = builder.articleLabel;
        this.articleContent = builder.articleContent;
        this.articleStatus = builder.articleStatus;
        this.articleCollectNum = builder.articleCollectNum;
        this.articleClickNum = builder.articleClickNum;
        this.articleCommentNum = builder.articleCommentNum;
        this.status = builder.status;
        this.createTime = builder.createTime;
        this.createUserId = builder.createUserId;
        this.updateTime = builder.updateTime;
        this.updateUserId = builder.updateUserId;
        this.verifyTime = builder.verifyTime;
        this.verifyUserId = builder.verifyUserId;
        this.articleVisible = builder.articleVisible;
    }
	public static Builder create() {
		return new Builder();
	}

	/**
	 * 
	 * @author 何家明  2018年08月02日 13:21:15
	 * @return
	 */
    public String getId() {
		return id;
	}
    /**
	 * 
	 * @author 何家明  2018年08月02日 13:21:15
	 * @param id
	 */
    public void setId(String id) {
		this.id = id;
	}
	/**
	 * 文章标题
	 * @author 何家明  2018年08月02日 13:21:15
	 * @return
	 */
    public String getArticleTitle() {
		return articleTitle;
	}
    /**
	 * 文章标题
	 * @author 何家明  2018年08月02日 13:21:15
	 * @param articleTitle
	 */
    public void setArticleTitle(String articleTitle) {
		this.articleTitle = articleTitle;
	}
	/**
	 * 文章分类（COMMON_ARTICLE_CATEGORY）
	 * @author 何家明  2018年08月02日 13:21:15
	 * @return
	 */
    public String getArticleCategory() {
		return articleCategory;
	}
    /**
	 * 文章分类（COMMON_ARTICLE_CATEGORY）
	 * @author 何家明  2018年08月02日 13:21:15
	 * @param articleCategory
	 */
    public void setArticleCategory(String articleCategory) {
		this.articleCategory = articleCategory;
	}
	/**
	 * 文章标签，逗号分隔
	 * @author 何家明  2018年08月02日 13:21:15
	 * @return
	 */
    public String getArticleLabel() {
		return articleLabel;
	}
    /**
	 * 文章标签，逗号分隔
	 * @author 何家明  2018年08月02日 13:21:15
	 * @param articleLabel
	 */
    public void setArticleLabel(String articleLabel) {
		this.articleLabel = articleLabel;
	}
	/**
	 * 文章内容
	 * @author 何家明  2018年08月02日 13:21:15
	 * @return
	 */
    public String getArticleContent() {
		return articleContent;
	}
    /**
	 * 文章内容
	 * @author 何家明  2018年08月02日 13:21:15
	 * @param articleContent
	 */
    public void setArticleContent(String articleContent) {
		this.articleContent = articleContent;
	}
	/**
	 * 文章状态 I初始数据 S已提交 C已审核
	 * @author 何家明  2018年08月02日 13:21:15
	 * @return
	 */
    public String getArticleStatus() {
		return articleStatus;
	}
    /**
	 * 文章状态 I初始数据 S已提交 C已审核
	 * @author 何家明  2018年08月02日 13:21:15
	 * @param articleStatus
	 */
    public void setArticleStatus(String articleStatus) {
		this.articleStatus = articleStatus;
	}
	/**
	 * 文章收藏数
	 * @author 何家明  2018年08月02日 13:21:15
	 * @return
	 */
    public Integer getArticleCollectNum() {
		return articleCollectNum;
	}
    /**
	 * 文章收藏数
	 * @author 何家明  2018年08月02日 13:21:15
	 * @param articleCollectNum
	 */
    public void setArticleCollectNum(Integer articleCollectNum) {
		this.articleCollectNum = articleCollectNum;
	}
	/**
	 * 文章点击数
	 * @author 何家明  2018年08月02日 13:21:15
	 * @return
	 */
    public Integer getArticleClickNum() {
		return articleClickNum;
	}
    /**
	 * 文章点击数
	 * @author 何家明  2018年08月02日 13:21:15
	 * @param articleClickNum
	 */
    public void setArticleClickNum(Integer articleClickNum) {
		this.articleClickNum = articleClickNum;
	}
	/**
	 * 文章评论数
	 * @author 何家明  2018年08月02日 13:21:15
	 * @return
	 */
    public Integer getArticleCommentNum() {
		return articleCommentNum;
	}
    /**
	 * 文章评论数
	 * @author 何家明  2018年08月02日 13:21:15
	 * @param articleCommentNum
	 */
    public void setArticleCommentNum(Integer articleCommentNum) {
		this.articleCommentNum = articleCommentNum;
	}
	/**
	 * 数据状态 C 正常 D 删除
	 * @author 何家明  2018年08月02日 13:21:15
	 * @return
	 */
    public String getStatus() {
		return status;
	}
    /**
	 * 数据状态 C 正常 D 删除
	 * @author 何家明  2018年08月02日 13:21:15
	 * @param status
	 */
    public void setStatus(String status) {
		this.status = status;
	}
	/**
	 * 
	 * @author 何家明  2018年08月02日 13:21:15
	 * @return
	 */
    public Date getCreateTime() {
		return createTime;
	}
    /**
	 * 
	 * @author 何家明  2018年08月02日 13:21:15
	 * @param createTime
	 */
    public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}
	/**
	 * 
	 * @author 何家明  2018年08月02日 13:21:15
	 * @return
	 */
    public String getCreateUserId() {
		return createUserId;
	}
    /**
	 * 
	 * @author 何家明  2018年08月02日 13:21:15
	 * @param createUserId
	 */
    public void setCreateUserId(String createUserId) {
		this.createUserId = createUserId;
	}
	/**
	 * 
	 * @author 何家明  2018年08月02日 13:21:15
	 * @return
	 */
    public Date getUpdateTime() {
		return updateTime;
	}
    /**
	 * 
	 * @author 何家明  2018年08月02日 13:21:15
	 * @param updateTime
	 */
    public void setUpdateTime(Date updateTime) {
		this.updateTime = updateTime;
	}
	/**
	 * 
	 * @author 何家明  2018年08月02日 13:21:15
	 * @return
	 */
    public String getUpdateUserId() {
		return updateUserId;
	}
    /**
	 * 
	 * @author 何家明  2018年08月02日 13:21:15
	 * @param updateUserId
	 */
    public void setUpdateUserId(String updateUserId) {
		this.updateUserId = updateUserId;
	}
	/**
	 * 审核时间
	 * @author 何家明  2018年08月02日 13:21:15
	 * @return
	 */
    public Date getVerifyTime() {
		return verifyTime;
	}
    /**
	 * 审核时间
	 * @author 何家明  2018年08月02日 13:21:15
	 * @param verifyTime
	 */
    public void setVerifyTime(Date verifyTime) {
		this.verifyTime = verifyTime;
	}
	/**
	 * 审核人
	 * @author 何家明  2018年08月02日 13:21:15
	 * @return
	 */
    public String getVerifyUserId() {
		return verifyUserId;
	}
    /**
	 * 审核人
	 * @author 何家明  2018年08月02日 13:21:15
	 * @param verifyUserId
	 */
    public void setVerifyUserId(String verifyUserId) {
		this.verifyUserId = verifyUserId;
	}
	/**
	 * 他人是否可见 Y是 N否
	 * @author 何家明  2018年08月02日 13:21:15
	 * @return
	 */
    public String getArticleVisible() {
		return articleVisible;
	}
    /**
	 * 他人是否可见 Y是 N否
	 * @author 何家明  2018年08月02日 13:21:15
	 * @param articleVisible
	 */
    public void setArticleVisible(String articleVisible) {
		this.articleVisible = articleVisible;
	}

    @Override
	public String toString() {
		return "Article [id=" + id + ", articleTitle=" + articleTitle + ", articleCategory=" + articleCategory + ", articleLabel=" + articleLabel + ", articleContent=" + articleContent + ", articleStatus=" + articleStatus + ", articleCollectNum=" + articleCollectNum + ", articleClickNum=" + articleClickNum + ", articleCommentNum=" + articleCommentNum + ", status=" + status + ", createTime=" + createTime + ", createUserId=" + createUserId + ", updateTime=" + updateTime + ", updateUserId=" + updateUserId + ", verifyTime=" + verifyTime + ", verifyUserId=" + verifyUserId + ", articleVisible=" + articleVisible + "]";
	}
    public static class Builder {
        private String id;
        private String articleTitle;
        private String articleCategory;
        private String articleLabel;
        private String articleContent;
        private String articleStatus;
        private Integer articleCollectNum;
        private Integer articleClickNum;
        private Integer articleCommentNum;
        private String status;
        private Date createTime;
        private String createUserId;
        private Date updateTime;
        private String updateUserId;
        private Date verifyTime;
        private String verifyUserId;
        private String articleVisible;
        /**
	     * 
	     * @author 何家明  2018年08月02日 13:21:15
	     * @param id
	     */
        public Builder id(String id) {
	    	this.id = id;
	        return this;
    	}
        /**
	     * 文章标题
	     * @author 何家明  2018年08月02日 13:21:15
	     * @param articleTitle
	     */
        public Builder articleTitle(String articleTitle) {
	    	this.articleTitle = articleTitle;
	        return this;
    	}
        /**
	     * 文章分类（COMMON_ARTICLE_CATEGORY）
	     * @author 何家明  2018年08月02日 13:21:15
	     * @param articleCategory
	     */
        public Builder articleCategory(String articleCategory) {
	    	this.articleCategory = articleCategory;
	        return this;
    	}
        /**
	     * 文章标签，逗号分隔
	     * @author 何家明  2018年08月02日 13:21:15
	     * @param articleLabel
	     */
        public Builder articleLabel(String articleLabel) {
	    	this.articleLabel = articleLabel;
	        return this;
    	}
        /**
	     * 文章内容
	     * @author 何家明  2018年08月02日 13:21:15
	     * @param articleContent
	     */
        public Builder articleContent(String articleContent) {
	    	this.articleContent = articleContent;
	        return this;
    	}
        /**
	     * 文章状态 I初始数据 S已提交 C已审核
	     * @author 何家明  2018年08月02日 13:21:15
	     * @param articleStatus
	     */
        public Builder articleStatus(String articleStatus) {
	    	this.articleStatus = articleStatus;
	        return this;
    	}
        /**
	     * 文章收藏数
	     * @author 何家明  2018年08月02日 13:21:15
	     * @param articleCollectNum
	     */
        public Builder articleCollectNum(Integer articleCollectNum) {
	    	this.articleCollectNum = articleCollectNum;
	        return this;
    	}
        /**
	     * 文章点击数
	     * @author 何家明  2018年08月02日 13:21:15
	     * @param articleClickNum
	     */
        public Builder articleClickNum(Integer articleClickNum) {
	    	this.articleClickNum = articleClickNum;
	        return this;
    	}
        /**
	     * 文章评论数
	     * @author 何家明  2018年08月02日 13:21:15
	     * @param articleCommentNum
	     */
        public Builder articleCommentNum(Integer articleCommentNum) {
	    	this.articleCommentNum = articleCommentNum;
	        return this;
    	}
        /**
	     * 数据状态 C 正常 D 删除
	     * @author 何家明  2018年08月02日 13:21:15
	     * @param status
	     */
        public Builder status(String status) {
	    	this.status = status;
	        return this;
    	}
        /**
	     * 
	     * @author 何家明  2018年08月02日 13:21:15
	     * @param createTime
	     */
        public Builder createTime(Date createTime) {
	    	this.createTime = createTime;
	        return this;
    	}
        /**
	     * 
	     * @author 何家明  2018年08月02日 13:21:15
	     * @param createUserId
	     */
        public Builder createUserId(String createUserId) {
	    	this.createUserId = createUserId;
	        return this;
    	}
        /**
	     * 
	     * @author 何家明  2018年08月02日 13:21:15
	     * @param updateTime
	     */
        public Builder updateTime(Date updateTime) {
	    	this.updateTime = updateTime;
	        return this;
    	}
        /**
	     * 
	     * @author 何家明  2018年08月02日 13:21:15
	     * @param updateUserId
	     */
        public Builder updateUserId(String updateUserId) {
	    	this.updateUserId = updateUserId;
	        return this;
    	}
        /**
	     * 审核时间
	     * @author 何家明  2018年08月02日 13:21:15
	     * @param verifyTime
	     */
        public Builder verifyTime(Date verifyTime) {
	    	this.verifyTime = verifyTime;
	        return this;
    	}
        /**
	     * 审核人
	     * @author 何家明  2018年08月02日 13:21:15
	     * @param verifyUserId
	     */
        public Builder verifyUserId(String verifyUserId) {
	    	this.verifyUserId = verifyUserId;
	        return this;
    	}
        /**
	     * 他人是否可见 Y是 N否
	     * @author 何家明  2018年08月02日 13:21:15
	     * @param articleVisible
	     */
        public Builder articleVisible(String articleVisible) {
	    	this.articleVisible = articleVisible;
	        return this;
    	}

        public Article build() {
			return new Article(this);
		}
	}






    // ******************* 扩展 *******************//

    public String getCreateUserName() {
        User user = UserCache.me().getByUserId(createUserId);
        return user.getUserName();
    }
    
    public String getArticleCategoryName() {
        Dict dict = DictCache.me().getByGrandPaCodeAndValue("COMMON_ARTICLE_CATEGORY", articleCategory);
        return dict.getDictText();
    }
    
    public String getArticleIntroduction() {
        return SystemUtil.htmlToText(articleContent);
    }
}
